﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AvaProvi
{
    [Serializable]
    public class clsDescripcionGeneral_CRN:clsEstado,IControlEstados
    {
        #region Propiedades de clase
        public string UsoActual { get; set; }
        public int NoDeEstacionamientos { get; set; }
        public int NoBaniosCompletos { get; set; }
        public int NoBaniosMedios { get; set; }
        public bool Elevador { get; set; }
        public string CalidadProyecto { get; set; }
        public string CalidadConstruccion { get; set; }
        public string ClasificacionConstruccion { get; set; }
        public string DeficienciasRelevantes { get; set; }
        public string EstadoConservacion { get; set; }
        public int UnidadesRentables { get; set; }
        public int UnidadesRentablesGenerales { get; set; }
        public bool Sotano { get; set; }
        public bool Mezzaninne { get; set; }
        public string Cubiertas { get; set; }
        public bool MurosPrefabricados { get; set; }
        public bool MurosDeConcreto { get; set; }
        public bool ColumnasCortas { get; set; }
        public bool Contraventeo { get; set; }
        public string Trabes { get; set; }
        public string ColumnasDe { get; set; }
        public string Claros { get; set; }
        public string GolpeteoColindante { get; set; }
        public bool Hundimientos { get; set; }
        public bool Sobrepeso { get; set; }
        public bool RepDanios { get; set; }
        public bool EstReforzado { get; set; }
        public clsInmueble_CRN Inmueble { get; set; }
        #endregion

        #region Contructor
        public clsDescripcionGeneral_CRN(clsInmueble_CRN objInmueble):base()
        {
            this.CalidadConstruccion = string.Empty;
            this.CalidadProyecto = string.Empty;
            this.Claros = string.Empty;
            this.ClasificacionConstruccion = string.Empty;
            this.ColumnasCortas = false; ;
            this.ColumnasDe = string.Empty;
            this.Contraventeo = false;
            this.Cubiertas = string.Empty;
            this.DeficienciasRelevantes = string.Empty;
            this.Elevador = false;
            this.EstadoConservacion = string.Empty;
            this.EstReforzado = false;
            this.GolpeteoColindante = string.Empty;
            this.Hundimientos = false;
            this.Inmueble = objInmueble;
            this.Mezzaninne = false;
            this.MurosDeConcreto = false;
            this.MurosPrefabricados = false;
            this.NoBaniosCompletos = 0;
            this.NoBaniosMedios = 0;
            this.NoDeEstacionamientos = 0;
            this.RepDanios = false;
            this.Sobrepeso = false;
            this.Sotano = false;
            this.Trabes = string.Empty;
            this.UnidadesRentables = 0;
            this.UnidadesRentablesGenerales = 0;
            this.UsoActual = string.Empty;
        }
        #endregion

        #region Métodos

        public bool Guardar()
        {
            if (this.DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaDescripcion();
                else
                {
                    if (this.EsModificado)
                        return ModificaDescripcion();
                    else
                        return EliminaDescripcion();
                }
            }
            return false;

        }

        private bool EliminaDescripcion()
        {
            clsDescripcionGeneral_CD objDescripcion_CD = new clsDescripcionGeneral_CD();
            return objDescripcion_CD.EliminaDescripcion(this);
        }

        private bool ModificaDescripcion()
        {
             clsDescripcionGeneral_CD objDescripcion_CD = new clsDescripcionGeneral_CD();
            return objDescripcion_CD.ModificaDescripcion(this);
        }

        private bool CreaDescripcion()
        {
             clsDescripcionGeneral_CD objDescripcion_CD = new clsDescripcionGeneral_CD();
            if(objDescripcion_CD.CreaDescripcion(this))
            {
                this.EsModificado = true;
                return true;
            }
            return true;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static clsDescripcionGeneral_CRN RecuperaDescripcion(clsInmueble_CRN objInmueble)
        {
            clsDescripcionGeneral_CRN objDescripcion = new clsDescripcionGeneral_CRN(objInmueble);
            clsDescripcionGeneral_CD objDescripcion_CD = new clsDescripcionGeneral_CD();
            dsInmoviliario.DescripcionRow DescripcionRecuperada = objDescripcion_CD.RecuperaDescripcion(objInmueble.Avaluo.IdAvaluo);
            if (DescripcionRecuperada != null)
            {
                objDescripcion.CalidadConstruccion = DescripcionRecuperada.CalidadConstruccion;
                objDescripcion.CalidadProyecto = DescripcionRecuperada.CalidadProyecto;
                objDescripcion.Claros = DescripcionRecuperada.Claros;
                objDescripcion.ClasificacionConstruccion = DescripcionRecuperada.ClasificacionConst;
                objDescripcion.ColumnasCortas = DescripcionRecuperada.ColumnasCortas;
                objDescripcion.ColumnasDe = DescripcionRecuperada.ColumnasDe;
                objDescripcion.Contraventeo = DescripcionRecuperada.Contraventeo;
                objDescripcion.Cubiertas = DescripcionRecuperada.Cubiertas;
                objDescripcion.DeficienciasRelevantes = DescripcionRecuperada.DeficienciasRel;
                objDescripcion.Elevador = DescripcionRecuperada.Elevador;
                objDescripcion.EsModificado = true;
                objDescripcion.EstadoConservacion = DescripcionRecuperada.EdoConservavion;
                objDescripcion.EstReforzado = DescripcionRecuperada.EstReforzado;
                objDescripcion.GolpeteoColindante = DescripcionRecuperada.GolpeteoCol;
                objDescripcion.Hundimientos = DescripcionRecuperada.Hundimientos;
                objDescripcion.Mezzaninne = DescripcionRecuperada.Mezzaninne;
                objDescripcion.MurosDeConcreto = DescripcionRecuperada.MurosConc;
                objDescripcion.MurosPrefabricados = DescripcionRecuperada.MurosPref;
                objDescripcion.NoBaniosCompletos = DescripcionRecuperada.NoBaniosComp;
                objDescripcion.NoBaniosMedios = DescripcionRecuperada.NoBaniosMed;
                objDescripcion.NoDeEstacionamientos = DescripcionRecuperada.NoEstacionamientos;
                objDescripcion.RepDanios = DescripcionRecuperada.RepDanios;
                objDescripcion.Sobrepeso = DescripcionRecuperada.Sobrepeso;
                objDescripcion.Sotano = DescripcionRecuperada.Sotano;
                objDescripcion.Trabes = DescripcionRecuperada.Trabes;
                objDescripcion.UnidadesRentables = DescripcionRecuperada.UnidadesRentables;
                objDescripcion.UnidadesRentablesGenerales = DescripcionRecuperada.UnidadesRentGen;
                objDescripcion.UsoActual = DescripcionRecuperada.UsoActual;
            }
            return objDescripcion;
        }
        #endregion
    }
}
